package com.hsurosy.hsuchain.nft.base.exception;

/**
 * 业务异常类
 *
 * @Author Hsu琛君珩
 * @Date 2024-10-04 17:30
 * @Description
 * @Version: v1.0.0
 */
public class BizException extends RuntimeException {

    /**
     * 错误码
     */
    private ErrorCode errorCode;

    /**
     * 根据错误码创建业务异常
     *
     * @param errorCode 错误码
     */
    public BizException(ErrorCode errorCode) {
        super(errorCode.getMessage());
        this.errorCode = errorCode;
    }

    /**
     * 根据自定义消息和错误码创建业务异常
     *
     * @param message 自定义异常消息
     * @param errorCode 错误码
     */
    public BizException(String message, ErrorCode errorCode) {
        super(message);
        this.errorCode = errorCode;
    }

    /**
     * 根据自定义消息、异常原因和错误码创建业务异常
     *
     * @param message 自定义异常消息
     * @param cause 异常原因
     * @param errorCode 错误码
     */
    public BizException(String message, Throwable cause, ErrorCode errorCode) {
        super(message, cause);
        this.errorCode = errorCode;
    }

    /**
     * 根据异常原因和错误码创建业务异常
     *
     * @param cause 异常原因
     * @param errorCode 错误码
     */
    public BizException(Throwable cause, ErrorCode errorCode) {
        super(cause);
        this.errorCode = errorCode;
    }

    /**
     * 根据自定义消息、异常原因、是否启用抑制和堆栈跟踪可写性创建业务异常
     *
     * @param message 自定义异常消息
     * @param cause 异常原因
     * @param enableSuppression 是否启用异常抑制
     * @param writableStackTrace 是否允许堆栈跟踪写入
     * @param errorCode 错误码
     */
    public BizException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace, ErrorCode errorCode) {
        super(message, cause, enableSuppression, writableStackTrace);
        this.errorCode = errorCode;
    }

    /**
     * 获取错误码
     *
     * @return 错误码
     */
    public ErrorCode getErrorCode() {
        return errorCode;
    }

    /**
     * 设置错误码
     *
     * @param errorCode 错误码
     */
    public void setErrorCode(ErrorCode errorCode) {
        this.errorCode = errorCode;
    }
}
